草庐IT

Android PlusOneButton 不初始化

全部标签

c++ - 特征矩阵初始化的 clang 格式

例如要初始化Eigen::Matrix3i我们可以使用语法:Eigen::Matrix3iT;T但是,当使用clang-format(在我的例子中是3.6)和Google样式时,这个漂亮的初始化变成:Eigen::Matrix3iT;T有没有简单的方法可以避免这种情况?有没有办法告诉clang-format跳过这样的东西? 最佳答案 看来您唯一的选择是使用相当丑陋的clang格式切换语法:Eigen::Matrix3iT;//clang-formatoffT 关于c++-特征矩阵初始化的

c++ - 在施工期间采用类成员的未初始化引用是否合法?

来自这个question,我更进一步:C*c=static_cast(malloc(sizeof(C)));如引用问题中所述,在调用构造函数之前访问*c(其成员)是未定义的行为。但是,指针本身当然是有效的。现在在构造函数中,成员已经可用,我应该可以取消地址了。综上所述,我得出以下结论是合法的:classY;classX{Y&y;public:X(Y&y):y(y){}//non-trivialconstructor!};classY{X&x;public:Y(X&x):x(x){}};classZ{Xx;Yy;public:Z():x(y),y(x){}};只要X的构造函数不使用对Y的

c++ - 结构化绑定(bind)的标识符是否按顺序初始化?

很难从proposal中推断出.C++17结构化绑定(bind)会从左到右初始化它们的标识符吗?这是否保证打印“first”、“second”、“third”?#includestructA{A(){std::cout 最佳答案 结构化绑定(bind)不会复制值;它引用它们。在您的示例中,a不是返回值第一个成员的拷贝;这是对它的引用。由于您正在初始化引用而不是值,因此无法通过查看构造函数调用的顺序来检测初始化顺序。对于具有公共(public)成员的结构,获取这些引用的顺序无关紧要,因为您无法干扰该过程。对于实现结构化绑定(bind)

c++ - 使用聚合初始值设定项声明空 C++ 数组

在C++中,与C不同,空数组Tname[]是非法的,thetypedeclaredis"arrayofunknownboundofT",whichisakindofincompletetype.但是,当usedinadeclarationwithanaggregateinitializer如Tname[]={val1,val2,...},其中数组分配有初始化列表中的元素数。聚合初始值设定项为空时的预期行为是什么?T名称[]={}我已经测试了g++(4.8.4版)和clang(3.4版),它们都没有给出任何错误或警告,并且似乎分配了1个元素。这是定义的行为吗?文档?inta[]={};i

C++:嵌套结构的平面初始化列表?

已定义structA{inta,b;};structB{Aa;intb;};下面的初始化是显而易见的:Bb1={{1}};//initializesb1.a.aBb2={{1,2}};//initializesb1.a.a,b1.a.bBb3={{1},2};//initializesb1.a.a,b1.b但令我惊讶的是,VC++2013还允许这些初始化而没有任何警告:Bb4={1};//initializesb4.a.aBb5={1,2};//initializesb5.a.a,b5.a.bBb6={1,2,3};//initializesb6.a.a,b6.a.b,b6.b嵌套结构

c++ - 在初始化列表的上下文中缩小的奇怪行为

有人知道为什么编译时没有警告吗intmain(){constinti=1024;std::initializer_listi_l={i};//nowarningreturn0;}但不会intmain(){constinti=pow(2,10);std::initializer_listi_l={i};//warningreturn0;}警告:non-constant-expressioncannotbenarrowedfromtype'int'to'unsignedlong'ininitializerlist[-Wc++11-narrowing]std::initializer_lis

c++ - 为什么大括号括起来的初始值设定项列表不适用于 std::array

这个问题在这里已经有了答案:Whencanouterbracesbeomittedinaninitializerlist?(1个回答)关闭5年前。我想用对象列表初始化一个vector或数组。它适用于vector,但不适用于数组:structWidget{stringname;vectorlist;};structObject{stringname;vectorlist;Object(string_name,vector_list):name(_name),list(_list){}};intmain(){constvectorvw={{"vw1",{1,2,3}},{"vw2",{1,

c++ - 使用参数化构造函数初始化类成员 - 编译器认为我正在声明一个函数?

我正在尝试初始化一个类成员,其中该成员是另一个类的实例。VisualStudio似乎认为我正在声明一个函数成员:classOtherClass{OtherClass();OtherClass(stringFoo);}classMainClass{//ThisCompiles.DefaultconstructorusedOtherClassInstance1;//Doesnotcompile.VisualstudiothinksI'mdeclaringafunctionmemberthatreturnsanOtherClass.OtherClassInstance2("Foobar");

c++ - 用双花括号初始化 vector :std::string vs int

在这个问题的回答中:Initializingvectorwithdoublecurlybraces表明vectorv={{"a","b"}};将调用带有initializer_list的std::vector构造函数和一个元素。因此vector中的第一个(也是唯一一个)元素将从{"a","b"}构造。这会导致未定义的行为,但这超出了这里的重点。我发现的是std::vectorv={{2,3}};将使用两个元素的initializer_list调用std::vector构造函数。造成这种行为差异的原因是什么? 最佳答案 类类型列表初始

c++ - 我可以用三元初始化一个 char[] 吗?

我问了aquestionaboutit并没有得到一个真正明确的答案,但在阅读之后thisarticle我开始更喜欢constchar[]而不是constchar*。我在用三元初始化时遇到了困难。给定constboolbar,我试过:constcharfoo[]=bar?"lorem":"ipsum"这给了我错误:error:initializerfailstodeterminesizeoffooconstcharfoo[]=bar?{'l','o','r','e','m','\0'}:{'i','p','s','u','m','\0'这给了我错误:error:expectedprima